#!/usr/bin/env python3
#-*- encoding:utf-8 -*-

"""
文件功能： SSE Client 用法示例。接收来自 web service的微信消息，进行处理，并把处理结果返回回去。
作者: arthur.chen@huawei.com
函数：
   1. msg_callback(): 负责处理消息的
     a) 与 SSE 服务器建立长连接 （web service 和 SSE Server 在同一个地址上提供服务）
     b) 当SSE 服务器有消息发送时， 能回调注册的函数进行消息处理（比如交给AI处理）
     c) 能通过向 reply url发送的方式， 把回应消息发送会 web service 的 reply 接口，从而转发给微信公众号
   2. parse_message():  从消息中解析出 to_user, from_user, content
   3. reply_message():  向web service发送回应消息
"""

# SSE Client 示例用法
#  功能：接收来自 web service的微信消息，并把处理结果返回
#  安装所需库： pip install sseclient


# sse sdk库
from sse_sdk import ANESSEClient
import time
import requests

# SSE服务器地址（即web service地址）
url = "http://120.26.92.250"
sse_url = f"{url}/stream"
reply_url = f"{url}/reply"


""" 处理消息的函数（比如交由AI）， 一般被ANESSEClient回调
    注：由于微信要求，函数需4秒内处理完毕并返回给web service
@param to_user: 微信消息接收方
@param from_user: 微信消息发送方
@param content: 微信消息内容
@return: 返回消息的接收方、发送方、内容：
         to_user: 回应消息接收方，一般是微信消息的发送方
	    from_user：回应消息发送方，一般是微信消息接收方 
         reply_content： 回应消息的内容
"""
def msg_callback(to_user, from_user, content):
	# 以下代码为示例代码
  print("模拟通过AI处理数据 ...")
  data = {
      "reqType":0,
        "perception": {
            "inputText": {
                "text": content
            },
            "inputImage": {
                "url": "imageUrl"
            },
            "selfInfo": {
                "location": {
                    "city": "深圳",
                    "province": "深圳",
                    "street": "南山区粤海街道"
                }
            }
        },
        "userInfo": {
            "apiKey": "3991cff3e65e40dbac02f300c74b4b01",
            "userId": from_user
        }
    }

  url = "http://openapi.turingapi.com/openapi/api/v2"
  response = requests.post(url, json=data)
  if response.status_code == 200:
    # 解析返回的json
    json_data = response.json()
    print(json_data)
    value = json_data['results'][0]['values']['text']
    value = value.replace('\\n', '\r')
    print("robot retrun：", value)
  else:
    print("request to robot api FAILED.")
    
  return from_user, to_user, 'ANE智能体：\r' + value


if __name__ == '__main__':
  msg_callback("to user", "from user", "智能体模式语言")
  
  client = ANESSEClient(sse_url, reply_url, msg_callback)
  client.loop()	
	
